package pl.polsl.mmm.projectcomm.objects;

import pl.polsl.mmm.projectcomm.data.VertexArray;
import pl.polsl.mmm.projectcomm.data.vec3;
import pl.polsl.mmm.projectcomm.programs.ColorShaderProgram;

import static android.opengl.GLES20.GL_LINES;
import static android.opengl.GLES20.GL_POINTS;
import static android.opengl.GLES20.GL_TRIANGLES;
import static android.opengl.GLES20.glDrawArrays;
import static pl.polsl.mmm.projectcomm.Constants.BYTES_PER_FLOAT;

/**
 * Created by Maciek on 2015-01-27.
 */
public class Lines {
    private static final int POSITION_COMPONENT_COUNT = 3;
    private static final int STRIDE = POSITION_COMPONENT_COUNT * BYTES_PER_FLOAT;
    private int linesCount;
    private VertexArray vertexArray;

    public Lines (int linesCount) {
        vertexArray = new VertexArray(linesCount * 2 * POSITION_COMPONENT_COUNT);
        this.linesCount = linesCount;
    }

    public void putNormalData(vec3 posVec, vec3 normVec) {
        //najpierw wrzucamy współrzędne pozycji wierzchołka
        vertexArray.putData(posVec.x);
        vertexArray.putData(posVec.y);
        vertexArray.putData(posVec.z);
        //potem współrzędne pozycji przesunięte o wektor normalny wierchołka
        vertexArray.putData(posVec.x + normVec.x);
        vertexArray.putData(posVec.y + normVec.y);
        vertexArray.putData(posVec.z + normVec.z);
    }

    public void putBonesData(vec3 posVec1, vec3 posVec2) {
        //najpierw wrzucamy współrzędne pozycji wierzchołka
        vertexArray.putData(posVec1.x);
        vertexArray.putData(posVec1.y);
        vertexArray.putData(posVec1.z);
        //potem współrzędne pozycji wierzchołka parenta kości
        vertexArray.putData(posVec2.x);
        vertexArray.putData(posVec2.y);
        vertexArray.putData(posVec2.z);
    }


    public void bindData(ColorShaderProgram simpleProgram) {
        vertexArray.setVertexAttribPointer(
                0,
                simpleProgram.getPositionAttributeLocation(),
                POSITION_COMPONENT_COUNT,
                0);
    }

    public void drawLines() {
        glDrawArrays(GL_LINES, 0, linesCount * 2);
        vertexArray.reset();
    }

    public void drawPoints() {
        glDrawArrays(GL_POINTS, 0, linesCount * 2);
        vertexArray.reset();
    }

    public void reset() {
        vertexArray.reset();
    }
}
